From 52e84a9eccfac7bccc39bc6cd41ac8c2d6038b4f Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Tue, 15 Dec 2009 08:00:44 -0500 Subject: [PATCH] =?utf8?q?Bug=C2=A0602099=20-=20Actions=20can=20be=20activ?= =?utf8?q?atable=20too?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Add a couple type checks in gtk_activatable_do_set_related_action() to allow both GtkWidgets and GtkActions to implement GtkActivatable. Bug 602099 describes a use case for this. Also add a GObject prerequisite to the GtkActivatable interface. --- gtk/gtkactivatable.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/gtk/gtkactivatable.c b/gtk/gtkactivatable.c index 4f92e524ea..4aa1b366f1 100644 --- a/gtk/gtkactivatable.c +++ b/gtk/gtkactivatable.c @@ -276,13 +276,16 @@ gtk_activatable_get_type (void) { static GType activatable_type = 0; - if (!activatable_type) + if (!activatable_type) { activatable_type = g_type_register_static_simple (G_TYPE_INTERFACE, I_("GtkActivatable"), sizeof (GtkActivatableIface), (GClassInitFunc) gtk_activatable_class_init, 0, NULL, 0); + g_type_interface_add_prerequisite (activatable_type, G_TYPE_OBJECT); + } + return activatable_type; } @@ -445,7 +448,9 @@ gtk_activatable_do_set_related_action (GtkActivatable *activatable, { g_signal_handlers_disconnect_by_func (prev_action, gtk_activatable_action_notify, activatable); - _gtk_action_remove_from_proxy_list (prev_action, GTK_WIDGET (activatable)); + /* Check the type so that actions can be activatable too. */ + if (GTK_IS_WIDGET (activatable)) + _gtk_action_remove_from_proxy_list (prev_action, GTK_WIDGET (activatable)); /* Some apps are using the object data directly... * so continue to set it for a bit longer @@ -477,7 +482,8 @@ gtk_activatable_do_set_related_action (GtkActivatable *activatable, g_signal_connect (G_OBJECT (action), "notify", G_CALLBACK (gtk_activatable_action_notify), activatable); - _gtk_action_add_to_proxy_list (action, GTK_WIDGET (activatable)); + if (GTK_IS_WIDGET (activatable)) + _gtk_action_add_to_proxy_list (action, GTK_WIDGET (activatable)); g_object_set_data (G_OBJECT (activatable), "gtk-action", action); } -- 2.30.2